---
id: 联合类型
title: 联合类型
---


变量如果有多种类型，可以使用联合类型

```ts
// 有可能是字符串类型，也有可能是数字类型
let money: string | number = "";

money = "ABC"; // 正确赋值

money = -1; // 正确赋值

money = []; // 错误赋值: 不能将类型“never[]”分配给类型“string | number”。
```

## 变量内使用联合类型
```ts
// money 有可能是字符串类型，也有可能是数字类型
let money: string | number = ""; 

money = 1.028; // 数字类型

// 这时money 是数字类型可以调用toFixed方法
console.log(money.toFixed(2)) // 1.03  

// 这时money 是字符串类型，没有toFixed方法
money = '9.99999';

console.log(money.toFixed(2)) // 报错：属性“toFixed”在类型“string”上不存在。你是否指的是“fixed”? 

```

## 函数内使用联合类型

```ts
// 错误写法
function formatMoney(money: string | number) {
  return money.toFixed(2); // 类型“string | number”上不存在属性“toFixed”。类型“string”上不存在属性“toFixed”。
}

// 正确写法(这种写法叫作类型缩小)后面会有介绍
function formatMoney(money: string | number) {
  if (typeof money === "number") {
    return money.toFixed(2);
  } else {
    return Number(money).toFixed(2)
  }
}
```

:::warning 注意
** 只能访问此联合类型的所有类型里共有的属性或方法，解决办法就是使用类型缩小 **
:::

